package com.elitedatai.mchtest.mission.service;

import com.elitedatai.mchtest.mission.model.dto.FlightMissionDTO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Optional;

/**
 * 飞行任务服务接口
 * 提供飞行任务的增删改查业务逻辑
 */
public interface IFlightMissionService {

    /**
     * 创建飞行任务
     * @param flightMissionDTO 飞行任务DTO
     * @return 创建后的飞行任务DTO
     */
    FlightMissionDTO createFlightMission(FlightMissionDTO flightMissionDTO);

    /**
     * 根据ID获取飞行任务
     * @param id 任务ID
     * @return 飞行任务DTO
     */
    Optional<FlightMissionDTO> getFlightMissionById(Long id);

    /**
     * 根据任务ID获取飞行任务
     * @param missionId 任务ID
     * @return 飞行任务DTO
     */
    Optional<FlightMissionDTO> getFlightMissionByMissionId(String missionId);

    /**
     * 获取所有飞行任务
     * @return 飞行任务DTO列表
     */
    List<FlightMissionDTO> getAllFlightMissions();

    /**
     * 分页获取飞行任务
     * @param pageable 分页参数
     * @return 分页的飞行任务DTO
     */
    Page<FlightMissionDTO> getFlightMissionsPage(Pageable pageable);

    /**
     * 更新飞行任务
     * @param flightMissionDTO 飞行任务DTO
     * @return 更新后的飞行任务DTO
     */
    FlightMissionDTO updateFlightMission(FlightMissionDTO flightMissionDTO);

    /**
     * 根据ID删除飞行任务
     * @param id 任务ID
     */
    boolean deleteFlightMissionById(Long id);

    /**
     * 根据任务ID删除飞行任务
     * @param missionId 任务ID
     */
    boolean deleteFlightMissionByMissionId(String missionId);

    /**
     * 批量删除飞行任务
     * @param ids 任务ID列表
     */
    void deleteFlightMissionsByIds(List<Long> ids);
}
